/**	
 * タイトル：	字符操作类
 * 説明：    	
 *			
 * 会社名：	紹興日創軟件有限公司
 * 変更履歴：	2014/08/11 NIS 何
 *			新規作成
 *
 */
package com.nissoft.framework.util;

/**
 * @author NIS 何
 * @version 1.0
 */
public abstract class StringUtil {

	/**
	 * 是否为空
	 * 
	 * @param str
	 *            对象字符串
	 */
	public static boolean isEmpty(Object str) {
		return (str == null || "".equals(str));
	}

	/**
	 * 是否有长度
	 * 
	 * @param str
	 *            对象字符串
	 */
	public static boolean hasLength(CharSequence str) {
		return (str != null && str.length() > 0);
	}

	/**
	 * 是否有文本
	 * 
	 * @param str
	 *            对象字符串
	 */
	public static boolean hasText(CharSequence str) {
		if (!hasLength(str)) {
			return false;
		}
		int strLen = str.length();
		for (int i = 0; i < strLen; i++) {
			if (!Character.isWhitespace(str.charAt(i))) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 是否有空白
	 * 
	 * @param str
	 *            对象字符串
	 */
	public static boolean containsWhitespace(CharSequence str) {
		if (!hasLength(str)) {
			return false;
		}
		int strLen = str.length();
		for (int i = 0; i < strLen; i++) {
			if (Character.isWhitespace(str.charAt(i))) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 修剪字符串左右空白
	 * 
	 * @param str
	 *            对象字符串
	 */
	public static String trim(String str) {
		if (!hasLength(str)) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str);
		while (sb.length() > 0 && Character.isWhitespace(sb.charAt(0))) {
			sb.deleteCharAt(0);
		}
		while (sb.length() > 0
				&& Character.isWhitespace(sb.charAt(sb.length() - 1))) {
			sb.deleteCharAt(sb.length() - 1);
		}
		return sb.toString();
	}

	/**
	 * 修剪字符串左边空白
	 * 
	 * @param str
	 *            对象字符串
	 */
	public static String trimLeft(String str) {
		if (!hasLength(str)) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str);
		while (sb.length() > 0 && Character.isWhitespace(sb.charAt(0))) {
			sb.deleteCharAt(0);
		}
		return sb.toString();
	}

	/**
	 * 修剪字符串右边空白
	 * 
	 * @param str
	 *            对象字符串
	 */
	public static String trimRight(String str) {
		if (!hasLength(str)) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str);
		while (sb.length() > 0
				&& Character.isWhitespace(sb.charAt(sb.length() - 1))) {
			sb.deleteCharAt(sb.length() - 1);
		}
		return sb.toString();
	}

	/**
	 * 修剪字符串所有空白
	 * 
	 * @param str
	 *            对象字符串
	 */
	public static String trimAll(String str) {
		if (!hasLength(str)) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str);
		int index = 0;
		while (sb.length() > index) {
			if (Character.isWhitespace(sb.charAt(index))) {
				sb.deleteCharAt(index);
			} else {
				index++;
			}
		}
		return sb.toString();
	}

	/**
	 * 数组组合
	 * 
	 * @param arr
	 *            源数组
	 * @param join
	 *            连接符
	 */
	public static String join(Object[] arr, String join) {

		if (arr.length == 0) {
			return "";
		}
		StringBuffer sb = new StringBuffer();
		int length = arr.length;
		for (int i = 0; i < length - 1; i++) {
			sb.append(arr[i]);
			if (!isEmpty(join))
				sb.append(join);
		}
		sb.append(arr[length - 1]);
		return sb.toString();
	}
}
